package zuosheng.day3;

import java.util.*;

/**
 * @author lj
 * @Description: 比较器
 * @date 2020-11-02 15:16
 * @QQ 851477108
 */


public class ljComparator {

    public static class Student {
        public String name;
        public int id;
        public int age;

        public Student(String name, int id, int age) {
            this.name = name;
            this.id = id;
            this.age = age;
        }
    }

    public static void printStudents(Student[] students) {
        for (Student student : students) {
            System.out.println("Name : " + student.name + ", Id : " + student.id + ", Age : " + student.age);
        }
        System.out.println("===========================");
    }

    public static class IdAscendingComparator implements Comparator<Student> {
        @Override
        public int compare(Student o1, Student o2){
            //o1-o2是升序，相减负数在o1前,正数o2在前
            return o1.id - o2.id;
//            if (o1.id < o2.id){
//                //负数，o1在前
//                return -1;
//            }else if (o2.id < o1.id){
//                //正数，o2在前
//                return 1;
//            }else {
//                return 0;
//            }
        }
    }

    public static class IdDescendingComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            return o2.id - o1.id;
        }

    }

    public static class AgeAscendingComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            return o1.age - o2.age;
        }

    }

    public static class AgeDescendingComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            return o2.age - o1.age;
        }

    }

    public static void main(String[] args) {
        Student student1 = new Student("A", 1, 23);
        Student student2 = new Student("B", 2, 21);
        Student student3 = new Student("C", 3, 22);

        Student[] students = new Student[] { student3, student2, student1 };
        printStudents(students);

        //数组排序sort+比较器
        Arrays.sort(students, new IdAscendingComparator());
        printStudents(students);

//        Arrays.sort(students, new IdDescendingComparator());
//        printStudents(students);
//
//        Arrays.sort(students, new AgeAscendingComparator());
//        printStudents(students);
//
//        Arrays.sort(students, new AgeDescendingComparator());
//        printStudents(students);

        //堆排序+比较器
        PriorityQueue<Student>  heap = new PriorityQueue<>(new IdAscendingComparator());

        heap.add(student1);
        heap.add(student2);
        heap.add(student3);

        while (!heap.isEmpty()){
            //poll弹出队列头部
            Student student = heap.poll();
            System.out.println("Name : " + student.name + ", Id : " + student.id + ", Age : " + student.age);
        }

        TreeSet<Student> treeMap = new TreeSet<>(new IdAscendingComparator());



        Iterator iterator = treeMap.iterator();
        while (iterator.hasNext()){
            iterator.next();
        }
    }

}
